package com.santiao.publics.ad.ads;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;

import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTFeedAd;
import com.bytedance.sdk.openadsdk.TTNativeAd;
import com.bytedance.sdk.openadsdk.mediation.ad.MediationExpressRenderListener;
import com.bytedance.sdk.openadsdk.mediation.manager.MediationNativeManager;
import com.santiao.publics.config.Const;
import com.santiao.publics.util.FeedAdUtils;
import com.santiao.publics.util.UIUtils;
import com.umeng.umcrash.UMCrash;


import java.util.List;

/**
 * 融合demo，【Feed单个】流广告使用示例（模板和自渲染）。更多功能参考接入文档。
 *
 * 注意：每次加载的广告，只能展示一次
 *
 * 接入步骤：
 * 1、创建AdSlot对象
 * 2、创建TTAdNative对象
 * 3、创建加载、展示监听器
 * 4、加载广告
 * 5、加载成功后，展示广告
 * 6、在onDestroy中销毁广告
 */
public class MediationFeedService   {

    //是否显示成功
    public  static String ifFeedShow="1"; //0 显示成功 1 初始化中 2加载失败
    //是否调用显示方法
    public  static boolean ifShowFeedAd=false;
    public   String mMediaId; // 融合广告位

    public  TTFeedAd mTTFeedAd; // Feed广告对象
    private  TTAdNative.FeedAdListener mFeedAdListener; // 广告加载监听器
    private  MediationExpressRenderListener mExpressAdInteractionListener; // 模板广告展示监听器
    private  TTNativeAd.AdInteractionListener mAdInteractionListener; // 自渲染广告展示监听器

    private  FrameLayout mFeedContainer;

    public   MediationNativeManager manager;

    public  String ecpm = "";
    public  String slotId = "";
    public  String adStyle="0";


    public    int showFeedAdCount=0;


    public     void  intiDate(Context context ,FrameLayout mFeedContainers,String mMediaIds){
        showFeedAdCount=0;
        ifFeedShow="1";
        ifShowFeedAd = false;
        String simpleName = "";
        if(context!=null && context.getClass()!=null){
            simpleName = context.getClass().getSimpleName();
        }
        Log.d(Const.TAG,"MediationFeedService-----feed-------intiDate:"+simpleName+"----------"+showFeedAdCount);
        mFeedContainer = mFeedContainers;
        mMediaId  = mMediaIds;

        loadFeedAd(context);

    }
//
//    protected void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.mediation_activity_feed);
//
//       TextView textView =  findViewById(R.id.tel);
//        textView.setText("Feed单个");
//
//        // 聚合广告位（在GroMore平台的广告位，注意不是adn的代码位）
//        mMediaId = getResources().getString(R.string.feed_native_media_id);
//        TextView tvMediationId = findViewById(R.id.tv_media_id);
//        tvMediationId.setText(String.format(getResources().getString(R.string.ad_mediation_id), mMediaId));
//
//        // feed流广告容器
//        mFeedContainer = findViewById(R.id.fl_content);
//
//
//
//        // 广告加载
//        findViewById(R.id.bt_load).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                loadFeedAd();
//            }
//        });
//
//        // 广告展示
//        findViewById(R.id.bt_show).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                showFeedAd();
//            }
//        });
//    }

    public   void loadFeedAd(Context context ) {
        try {
            /** 1、创建AdSlot对象 */
            AdSlot adSlot = new AdSlot.Builder()
                    .setCodeId(mMediaId)
                    .setImageAcceptedSize(UIUtils.getScreenWidthInPx(context), UIUtils.dp2px(context, 340)) // 单位px
                    .setAdCount(1) // 请求广告数量为1到3条 （优先采用平台配置的数量）
                    .build();

            /** 2、创建TTAdNative对象 */
            TTAdNative adNativeLoader = TTAdSdk.getAdManager().createAdNative(context);

            /** 3、创建加载、展示监听器 */
            initListeners();

            /** 4、加载广告 */
            adNativeLoader.loadFeedAd(adSlot, mFeedAdListener);
        }catch (Exception e){
            if(Const.IF_UM) {
                UMCrash.generateCustomLog(e, "MediationNativeManager");
            }
            e.printStackTrace();
        }finally {
            AdRequestService adRequestService = new AdRequestService();
            adRequestService.initAdRequest("2",adStyle,ecpm,mMediaId,slotId,null);
            adRequestService.reportRequest();
        }

    }

    // 广告加载成功后，展示广告
    public  void showFeedAd(Activity  activity) {
        ++showFeedAdCount;
        ifShowFeedAd = true;
        String simpleName = "";
        if(activity!=null && activity.getClass()!=null){
            simpleName = activity.getClass().getSimpleName();
        }
        Log.d(Const.TAG,"MediationFeedService-----showFeedAd-------intiDate:"+simpleName+"-------"+showFeedAdCount);
        if (mTTFeedAd == null) {
            Log.i(Const.TAG, "请先加载广告或等待广告加载完毕后再调用show方法");
            return;
        }
        /** 5、展示广告 */
          manager = mTTFeedAd.getMediationManager();
        if (manager != null) {
            if (manager.isExpress()) { // --- 模板feed流广告
                mTTFeedAd.setExpressRenderListener(mExpressAdInteractionListener);
                mTTFeedAd.render(); // 调用render方法进行渲染，在onRenderSuccess中展示广告

            } else {                   // --- 自渲染feed流广告

                // 自渲染广告返回的是广告素材，开发者自己将其渲染成view
                View feedView = FeedAdUtils.getFeedAdFromFeedInfo(mTTFeedAd, activity, null, mAdInteractionListener);
                if (feedView != null) {
                    UIUtils.removeFromParent(feedView);
                    if(mFeedContainer!=null) {
                        mFeedContainer.removeAllViews();
                        mFeedContainer.addView(feedView);
                    }
                }
            }
        }



    }

    public   void initListeners() {
        // 广告加载监听器
        mFeedAdListener = new TTAdNative.FeedAdListener() {
            @Override
            public void onError(int i, String s) {
                ifFeedShow ="2";
                Log.d(Const.TAG, "feed load fail, errCode: " + i + ", errMsg: " + s);
            }

            @Override
            public void onFeedAdLoad(List<TTFeedAd> list) {
                if (list != null && list.size() > 0) {

                    Log.d(Const.TAG, "feed load success");
                    mTTFeedAd = list.get(0);
                } else {
                    Log.d(Const.TAG, "feed load success, but list is null");
                }
            }
        };
        // 模板广告展示监听器
        mExpressAdInteractionListener = new MediationExpressRenderListener() {
            @Override
            public void onRenderFail(View view, String s, int i) {
                ifFeedShow ="2";
                Log.d(Const.TAG, "feed express render fail, errCode: " + i + ", errMsg: " + s);
            }

            @Override
            public void onAdClick() {
                Log.d(Const.TAG, "feed express click");

                if(manager!=null){
                    ecpm = manager.getShowEcpm().getEcpm();
                    slotId = manager.getShowEcpm().getSlotId();
                }
                AdRequestService adRequestService = new AdRequestService();
                adRequestService.initAdRequest("1",adStyle,ecpm,mMediaId,slotId,null);
                adRequestService.reportRequest();
            }

            @Override
            public void onAdShow() {
                ifFeedShow ="0";
                Log.d(Const.TAG, "feed express show");
//
                if(manager!=null){
                    ecpm = manager.getShowEcpm().getEcpm();
                    slotId = manager.getShowEcpm().getSlotId();
                }
                AdRequestService adRequestService = new AdRequestService();
                adRequestService.initAdRequest("0",adStyle,ecpm,mMediaId,slotId,null);
                adRequestService. reportRequest();
            }

            @Override
            public void onRenderSuccess(View view, float v, float v1, boolean b) {
                Log.d(Const.TAG, "feed express render success1");
                if (mTTFeedAd != null) {
                    View expressFeedView = mTTFeedAd.getAdView(); // *** 注意不要使用onRenderSuccess参数中的view ***
                    UIUtils.removeFromParent(expressFeedView);
                    if(mFeedContainer!=null) {
                        mFeedContainer.removeAllViews();
                        mFeedContainer.addView(expressFeedView);
                    }
                }
            }
        };
        // 自渲染广告展示监听器
        mAdInteractionListener = new TTNativeAd.AdInteractionListener() {
            @Override
            public void onAdClicked(View view, TTNativeAd ttNativeAd) {
                Log.d(Const.TAG, "feed click");
            }

            @Override
            public void onAdCreativeClick(View view, TTNativeAd ttNativeAd) {
                Log.d(Const.TAG, "feed creative click");
            }

            @Override
            public void onAdShow(TTNativeAd ttNativeAd) {
                ifFeedShow ="0";
                Log.d(Const.TAG, "feed show");
            }
        };
    }


//    protected void onDestroy() {
//        super.onDestroy();
//        /** 6、在onDestroy中销毁广告 */
//        if (mTTFeedAd != null) {
//            mTTFeedAd.destroy();
//        }
//    }
}
